// 1. 引入wechat-http
import http from 'wechat-http'

// 2. 配置请求的基础地址
http.baseURL = 'https://live-api.itheima.net'

// 6. 请求拦截器
http.intercept.request = (options) => {
  const app = getApp()
  // 6.1 创建一个公共的请求头对象
  const defaultHeader = {}
  // 6.2 往对象里面加token
  if (app.token) defaultHeader.Authorization = app.token
  // 6.3 合并页面中的header对象和默认的请求头对象, 挂载到options上
  options.header = Object.assign(defaultHeader, options.header)
  return options
}

// 5. 响应拦截器
http.intercept.response = async ({ statusCode, data, config }) => {
  // 5.1 判断状态码是否为401
  if (statusCode === 401) {
    //-------------判断: 如果是/refreshToken调用进来的, 拦截去登录页-------------------
    if (config.url.includes('/refreshToken')) {
      // 获取当前页面的路径
      const pageStack = getCurrentPages()
      const pageInstance = pageStack[pageStack.length - 1]
      const redirectURL = pageInstance.route
      // 跳转去登录页
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }
    //------------判断: 如果是/refreshToken调用进来的, 拦截去登录页--------------------
    const app = getApp()
    // 5.2 如果是, 调用延迟token的接口(传递的参数是refreshToken)
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: app.refreshToken,
      },
    })
    // 5.3 更新token和refreshToken
    app.setToken(res.data.token)
    app.setRefreshToken(res.data.refreshToken)

    // -----------------无感请求(把上一次的请求再次请求)--------------------
    // console.log(config)
    return http(
      Object.assign(config, {
        header: { Authorization: app.token },
      })
    )
    // -----------------无感请求(把上一次的请求再次请求)--------------------
  }
  return data
}

// 3. 挂载到全局的wx对象上
wx.http = http

// 4. 模块化输出
export default http
